隨機森林樹 Random Forest
多數決方式
實作步驟與程式碼範例
假設你有 T 棵樹,對 m 個樣本進行了預測,結果儲存在一個矩陣中:
import numpy as np
def random_forest_vote(all_tree_preds):
# all_tree_preds 形狀為 (樹的數量, 樣本數量)
num_samples = all_tree_preds.shape[1]
final_predictions = []
for i in range(num_samples):
# 1. 取得所有樹對第 i 個樣本的預測值
sample_votes = all_tree_preds[:, i]
# 2. 統計各類別出現次數,並選出最高者 (多數決)
# np.bincount 統計次數,np.argmax 找出最大值的索引
most_frequent = np.argmax(np.bincount(sample_votes))
final_predictions.append(most_frequent)
return np.array(final_predictions)
核心要點
- 結果彙整:將每一棵樹的預測結果整合成矩陣,方便按樣本進行遍歷。
- 多數決運算:在術科環境中,
np.bincount是處理整數類別投票最常用的工具。 - 維度一致:最終輸出的長度必須等於樣本數
m。
平均法方式
假設 all_tree_preds 是一個矩陣,形狀為 (樹的數量, 樣本數量):
import numpy as np
def random_forest_average(all_tree_preds):
"""
實作回歸問題的平均法整合
"""
# 沿著 axis=0(樹的方向)計算平均值
# 這會針對每個樣本,將所有樹的預測值相加後除以樹的數量
final_predictions = np.mean(all_tree_preds, axis=0)
return final_predictions
核心解析
- 計算平均:使用
np.mean()是最標準的做法。 - 維度控制:透過指定
axis=0,NumPy 會將每一列(同一樣本的所有樹預測)進行平均。 - 輸出形狀:最終回傳的
final_predictions是一個長度為m(樣本數)的向量,確保每個樣本都有一個唯一的預測值。